const jwt = require('jsonwebtoken')
const { 
    createUser, 
    getUserInfoById,
    getUserInfoByUserName
 } = require('../service/user.service')
 const {
    userRegisterError,
    userLoginError,
    userChangePasswordFail
 } = require('../constant/err.type')
 const { JWT_SECRET } = require('../config/config.default')

class UserController {
    async userLogin(ctx) {    
        console.log('用户登录路由')
        const { user_name } = ctx.request.body
        try{
            const { password, ...res} = await getUserInfoByUserName(user_name)       
            // 在token的payload中，记录除了 password 之外的所有用户信息
            ctx.body = {
                code: '0000',
                message: '用户登录成功',
                result: {
                    token: jwt.sign(res, JWT_SECRET, { expiresIn: '1d' })
                }
            }
        } catch(err){
            console.log(err)
            ctx.app.emit('error', userLoginError, ctx)
        }        
    }
    async userLoginCookie(ctx)  {
        // 给客户端种植一个cookie
        // 后面浏览器每次请求服务器，都带着cookie
        // 当会话结束,cookie就死了
        // ctx.cookies.set('username', 'jianghaotian', {
        //     maxAge: 60000*60*24*7 // 设置 cookie 存活七天
        // })   
        let { user_name, password } = ctx.query
        ctx.session.userInfo = {user_name,password}
        ctx.body = {
            code: '0000',
            message: '用户登录成功',
            result: {
                userInfo: ctx.session.userInfo
            }
        }
    }
    async userLogoutCookie(ctx) {
        console.log('ctx.session.userInfo1:', ctx.session.userInfo)
        if(ctx.session.userInfo) {
            // delete ctx.session.userInfo
            ctx.session = null
        }
        console.log('ctx.session.userInfo2:', ctx.session.userInfo)
        console.log('ctx.cookies:', ctx.cookies)
        ctx.body = {
            code: '0000',
            message: '用户退出登录成功',
            result: {

            }
        }
    }
    async userRegister(ctx) {
        console.log('注册功能路由')
        const { user_name, password, is_admin=0 , sex=0 } = ctx.request.body
        // 生成用户id
        const id = 'id-' + new Date().getTime().toString(36) + '-' + Math.random().toString(36).substr(2, 9);
        try {
            const data = await createUser(id,user_name,password,is_admin,sex)
            console.log('数据库返回值:', data)
            ctx.body = {
                code: '0000',
                message: '用户注册成功',
                result: {
    
                }
            }
        } catch(err) {
            console.log(err)
            ctx.app.emit('error', userRegisterError, ctx)
        }
        
    }

    async changePassword(ctx) {
        console.log('修改密码控制器')
        // const {} = ctx.request.body
        // userChangePasswordFail
        ctx.body = '接口调用成功'
    }
    async userInfo(ctx) {
        console.log('获取用户信息路由')
        const {id} = ctx.request.body
        const { password, ...res } = await getUserInfoById(id)
        console.log('数据库返回值:', res)
        ctx.body = {
            code: '0000',
            message: '获取用户信息成功',
            result: res
        }
    }
}

module.exports = new UserController() 